package gps;

import gps_api.Rule;
import gps_api.State;

public interface Node extends Comparable<Node>{
	
	public State getState();
	
	public Node getAncestor();
	
	public Rule getRule();
	
	public Integer getLevel();
	
	public Double getCost();
	
	public Double getHeu();
	
	public Double getF();
	
	/**
	 * Return true if the node has an equal ancestor (same state)
	 * otherwise return false.
	 * @param state
	 * @return
	 */
	public boolean hasEqualAncestor(State state);
	
	/**
	 * Track the root and print all the rules
	 * until arrive to the node.
	 */
	public void printSolution();

}
